//
//  NSDate+Sina.swift
//  新浪日期处理
//
//  Created by iOS on 15/12/10.
//  Copyright © 2015年 iOS. All rights reserved.
//

import Foundation

extension NSDate {
    
    /**
    将新浪返回的时间字符串,转成系统的NSDate
    
    - parameter string: 新浪返回的时间字符串
    
    - returns: 系统的NSDate
    */
    class func sinaStringToDate(string: String) -> NSDate {
        // 转成系统的NSDate(很好比较时间)
        // 1.创建 NSDateFormatter
        let df = NSDateFormatter()
        
        // 设置区域
        df.locale = NSLocale(localeIdentifier: "en")
        
        // 要将字符串转成NSDate需要自定日期字符串的格式
        df.dateFormat = "EEE MMM dd HH:mm:ss zzz yyyy"
        
        // 将字符串转成NSDate
        let date = df.dateFromString(string)
        return date ?? NSDate() // 如果转换失败就返回一个当前时间
    }
    
    ///  返回日期描述字符串
    ///
    ///     格式如下
    ///     -   刚刚(一分钟内)
    ///     -   X分钟前(一小时内)
    ///     -   X小时前(当天)
    ///     -   昨天 HH:mm(昨天)
    ///     -   MM-dd HH:mm(一年内)
    ///     -   yyyy-MM-dd HH:mm(更早期)
    func sinaDateDescription() -> String {
        // 比较时间, iOS比较时间使用NSCalendar
        let calendar = NSCalendar.currentCalendar()
        
        // 判断当前对象是否是今天
        if calendar.isDateInToday(self) {
            // 获取系统当前时间和当前对象相差多少秒
            let delta = Int(NSDate().timeIntervalSinceDate(self))
            
            // 判断
            if delta < 60 { // 一分钟内
                return "刚刚"
            } else if delta < 60 * 60 { // 一小时内
                let m = delta / 60
                return "\(m) 分钟前"
            } else {
                let h = delta / 3600
                return "\(h) 小时前"
            }
        }
        
        // 其他时间需要返回特殊格式的日期字符串
        
        // 日期格式
        var dateFormat = ""
        
        if calendar.isDateInYesterday(self) {
            dateFormat = "昨天 HH:mm"
        } else {
            // 一年内,还是更早期, 同一年表示一年内,不是同一年表示更早期
            /* 
            compareDate
                date1: 第一个日期
                toDate: 第二个日期
                toUnitGranularity: 要比较的单位
            */
            if calendar.compareDate(self, toDate: NSDate(), toUnitGranularity: NSCalendarUnit.Year) == NSComparisonResult.OrderedSame {
                // 同一年
                dateFormat = "MM-dd HH:mm"
            } else {
                // 更早期
                dateFormat = "yyyy-MM-dd HH:mm"
            }
        }
        
        // 将当前日期根据日期格式,转成特殊日期格式字符串
        let df = NSDateFormatter()
        df.locale = NSLocale(localeIdentifier: "en")
        df.dateFormat = dateFormat
        
        // 将self转成日期字符串
        let dateString = df.stringFromDate(self)
        
        return dateString
    }
}